package com.zzuli.practice.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzuli.practice.entity.User;
import com.zzuli.practice.mapper.UserMapper;
import com.zzuli.practice.service.IUserService;
import com.zzuli.practice.util.MDigest5;
import com.zzuli.practice.util.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

/**
 * @auther pony
 * @create 2022-07-06 10:22
 */
@Service
public class UserService implements IUserService {
    //到spring容器取对象
    @Autowired
    private UserMapper userMapper;
    @Override
    public User ckUsername(String username) {
        //设置查询条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", username);
        return userMapper.selectOne(queryWrapper);
    }

    @Override
    public Boolean addUser(User user) {
        int insert = userMapper.insert(user);
        return insert==1 ? true : false;
    }


    public int rePwd(String username, String password) {
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("username", username);
        updateWrapper.set("password", password);
        return userMapper.update(null, updateWrapper);
    }

    /**
     * 返回所有的工作人员
     *
     * @return
     */
//    @Override
//    public List<Userinfo> getWorklist() {
//        return userMapper.selectList(null);
//    }

    /**
     * 分页
     *
     * @param pageIndex
     * @return
     */
//    @Override
//    public IPage<Userinfo> pageWorkList(Integer pageIndex, Integer pageSize) {
//        /**
//         * 技术上实现分页操作步骤
//         * 1、定义一个分页拦截器
//         * 2、声明mybatisplus 中Page<Userinfo> 对象
//         */
//        //判断pageIndex是否是有效数据
//        pageIndex = pageIndex == null || pageIndex < 1 ? 1 : pageIndex;
//        //判断pageSize是否是有效数据
//        pageSize = pageSize == null || pageSize < 1 ? 10 : pageSize;
//
//        // 创建Page<Userinfo> 对象
//        Page<Userinfo> page = new Page<>(pageIndex, pageSize);
//        Page<Userinfo> userinfoPageList = userMapper.selectPage(page, null);
//        // 判断页码的有效性，如果传递的页码大于总页数，取最后一页数据
//        if (userinfoPageList.getCurrent() > userinfoPageList.getPages()) {
//            // 设置当前页码为最后一页
//            page.setCurrent(userinfoPageList.getPages());
//            return userMapper.selectPage(page, null);
//        } else {
//            return userinfoPageList;
//        }
//    }

    /**
     * 新增数据
     *
     * @param userinfo
     * @return
     */
    public int add(User userinfo) {
        userinfo.setPassword(MDigest5.getMD5(userinfo.getPassword()));
        // 二次数据验证
        if (ckUsername(userinfo.getUsername()) != null)
            return 0;
        else
            return userMapper.insert(userinfo);
    }

    /**
     * 根据id查找数据
     *
     * @param id
     * @return
     */

    public User findById(Integer id) {
        return userMapper.selectById(id);
    }

    /**
     * 根据id修改记录
     *
     * @param model
     * @return
     */

    public int update(User model) {
        return userMapper.updateById(model);
    }

    /**
     * 批量删除
     *
     * @param ids
     * @return
     */
    public int deleteBatch(String[] ids) {
        return userMapper.deleteBatchIds(Arrays.asList(ids));
    }


    public PageUtil<User> getUserinfoPage(Integer pageIndex, Integer pageSize, String keyword){
        // 判断每页记录数有效性，如果小于1，设置10记录
        pageSize = pageSize==null || pageSize < 1 ? 10:pageSize;
        PageUtil<User> pageUtil = new PageUtil<>();
        keyword = "null".equals(keyword) || "".equals(keyword) ? null : keyword;
        pageUtil.setPageSize(pageSize);
        // 设置总记录数
        pageUtil.setTotal(userMapper.getTotal(keyword));
        // 查询到数据
        if(pageUtil.getTotal()>0){
            // 判断pageIndex数据有效性
            pageIndex = pageIndex==null || pageIndex <0 ? 0:pageIndex;  // 异常数据(负数,null)
            pageIndex = pageIndex >  pageUtil.getPages() ? pageUtil.getPages():pageIndex; // 如果pageIndex的值大于总页数
            // 设置页面索引
            pageUtil.setPageIndex(pageIndex);
            List<User> list = userMapper.getUserinfoPage((pageIndex-1)*pageSize, pageSize, keyword);
            pageUtil.setRecords(list);
        }
        return pageUtil;
    }

}
